package com.qf.test;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;

import javax.swing.tree.VariableHeightLayoutCache;

public class Demo4 {
    @Test
    public void TestPool() {
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();

        //最大连接数
        config.setMaxTotal(50);
        //最大空闲数
        config.setMaxIdle(10);
        //最小空闲数
        config.setMinIdle(5);
        //超时时间, 也就是多久没有用连接, 连接超时
        config.setMaxWaitMillis(3000);

        JedisPool pool = new JedisPool(config,"192.168.200.129",6379);

        //3. 通过连接池获取jedis对象
        Jedis jedis = pool.getResource();

        //4. 获取redis中的数据
        String key1 = jedis.get("key1");
        System.out.println("============" + key1);

        //5. 释放资源
        jedis.close();


    }


    @Test
    public void pipeline() {
        //1. 创建连接池
        JedisPool pool = new JedisPool("192.168.200.129", 6379);
        long l = System.currentTimeMillis();
        //2. 获取一个连接对象
        Jedis jedis = pool.getResource();

//        //3. 执行incr - 100000次
//        for (int i = 0; i < 100000; i++) {
//            jedis.incr("pp");
//        }
//        //4. 释放资源
//        jedis.close();

        //3. 创建管道
        Pipeline pipelined = jedis.pipelined();

        //4. 将需要执行的命令放入管道中
        for (int i = 0; i < 10000; i++) {
            pipelined.incr("key1");
        }

        //5. 统一执行命令
        pipelined.syncAndReturnAll();

        //6. 释放资源
        jedis.close();


        //结束时间-开始时间, 打印一共花了多少毫秒
        System.out.println(System.currentTimeMillis() - l);

    }
}
